﻿<?php
/**
* @version		$Id: controller.php 9973 2008-01-29 20:10:29Z ian $
* @package		Joomla
* @subpackage	Polls
* @copyright	Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.
* @license		GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport('joomla.application.component.controller');

require_once (JPATH_COMPONENT.DS.'libamap.php');
 
class amapController extends JController
{
	var $database;
	var $my;

	var $viewName; // le nom de la vue à afficher
	var $amap; // le modèle de données

	function init() {
		$this->amap = new amap;
	}		
	
	function display()
	{
		global $mainframe;
	
		$document =& JFactory::getDocument();
		$this->amap->init();
		
        $viewType    = $document->getType();
        if (!isset($this->viewName)) {$this->viewName = JRequest::getCmd( 'view', 'advoir');}
        $viewLayout    = JRequest::getCmd( 'layout', 'default' );
		
        $view = & $this->getView( $this->viewName, $viewType, '', array( 'base_path'=>$this->_basePath));
 
        // Get/Create the model
        if ($model = & $this->getModel($this->viewName)) {
            // Push the model into the view (as default)
            $view->setModel($model, true);
        }
 
        // Set the layout
        $view->setLayout($viewLayout);
		$view->amap =& $this->amap;
		afficheHeader();
		$view->display();  // Display the view
        afficheFooter();

		//		parent::display();
	}

	// ajout/modif d'une fiche d'adhérent
	function AdAd()	{
		global $mainframe;
	
		$database =& JFactory::getDBO();
		$my =& JFactory::getUser();

		// On comence à initialiser le formulaire pour pouvoir le passer à la vue si problème
		$this->amap->formulaire = new formulaire;
		$this->amap->formulaire->titre = 'Modifiez votre fiche adhérent';
		$this->amap->formulaire->submittext = 'Je modifie ma fiche adhérent';
		$this->amap->formulaire->task = 'AdAd';
		$this->amap->formulaire->fields = array(
				'id1'=>array('type'=>'fieldset','legend'=>'Vos coordonnées','endfield'=>'ville'),
				'IDA'=>array('libelle'=>'IDA','name'=>'IDA','type'=>'hidden','value'=>JRequest::getVar('IDA', ''), 'obli'=>0, 'errmsg'=>NULL),
				'nom'=>array('libelle'=>'Nom','name'=>'nom','size'=>30,'type'=>'text','value'=>JRequest::getVar('nom', ''), 'obli'=>1, 'errmsg'=>NULL),
				'prenom'=>array('libelle'=>'Prénom','name'=>'prenom','size'=>20,'type'=>'text','value'=>JRequest::getVar('prenom', ''), 'obli'=>1, 'errmsg'=>NULL),
				'email'=>array('libelle'=>'e-mail','name'=>'email','size'=>50,'type'=>'text','value'=>JRequest::getVar('email', ''), 'obli'=>1, 'errmsg'=>NULL),
				'fixe'=>array('libelle'=>'Téléphone Fixe','name'=>'fixe','size'=>15,'type'=>'text','value'=>JRequest::getVar('fixe', ''), 'obli'=>1, 'errmsg'=>NULL),
				'mobile'=>array('libelle'=>'Téléphone Mobile','name'=>'mobile','size'=>15,'type'=>'text','value'=>JRequest::getVar('mobile', ''), 'obli'=>1, 'errmsg'=>NULL),
				'adresse'=>array('libelle'=>'Adresse','name'=>'adresse','rows'=>3,'cols'=>38,'type'=>'textarea','value'=>JRequest::getVar('adresse', ''), 'obli'=>1, 'errmsg'=>NULL),
				'cp'=>array('libelle'=>'Code postal','name'=>'cp','size'=>4,'type'=>'text', 'obli'=>1, 'value'=>JRequest::getVar('cp', ''), 'errmsg'=>NULL),
				'ville'=>array('libelle'=>'Ville','name'=>'ville','size'=>15,'type'=>'text','value'=>JRequest::getVar('ville', ''), 'obli'=>1, 'errmsg'=>NULL),
				'id2'=>array('type'=>'fieldset','legend'=>'Personne pouvant retirer le panier à votre place','endfield'=>'mobile2'),
				'nom2'=>array('libelle'=>'Un deuxième nom','name'=>'nom2','size'=>30,'type'=>'text','value'=>JRequest::getVar('nom2', ''), 'obli'=>0, 'errmsg'=>NULL),
				'prenom2'=>array('libelle'=>'Un deuxième prénom','name'=>'prenom2','size'=>20,'type'=>'text','value'=>JRequest::getVar('prenom2', ''), 'obli'=>0, 'errmsg'=>NULL),
				'email2'=>array('libelle'=>'Un deuxième e-mail','name'=>'email2','size'=>50,'type'=>'text','value'=>JRequest::getVar('email2', ''), 'obli'=>0, 'errmsg'=>NULL),
				'mobile2'=>array('libelle'=>'Un deuxième téléphone Mobile','name'=>'mobile2','size'=>15,'type'=>'text','value'=>JRequest::getVar('mobile2', ''), 'obli'=>0, 'errmsg'=>NULL),
				'com1'=>array('type'=>'fieldset','legend'=>'Un commentaire à l\'adresse du bureau','endfield'=>'commentaireadherent'),
				'commentaireadherent'=>array('libelle'=>'Votre texte','name'=>'commentaireadherent','rows'=>4, 'cols'=>38,'type'=>'textarea','value'=>JRequest::getVar('commentaireadherent', ''), 'obli'=>0, 'errmsg'=>NULL),
				'pref1'=>array('type'=>'fieldset','legend'=>'Préférences','endfield'=>'avertOrph'),
				'publiAdr'=>array('libelle'=>'J\'accepte que mon adresse soit publiée dans le cadre du voisinage','name'=>'publiAdr','type'=>'checkbox','value'=>JRequest::getVar('publiAdr', 0), 'errmsg'=>NULL),
				'avertOrph'=>array('libelle'=>'Je souhaite être prévenu automatiquement par mail des paniers orphelins','name'=>'avertOrph','type'=>'checkbox','value'=>JRequest::getVar('avertOrph', 0), 'errmsg'=>NULL),				
				);
				
				if($mainframe->getUserState("amap_idag", 0) > 0){
					$this->amap->formulaire->fields += array(
						'com2'=>array('type'=>'fieldset','legend'=>'Le commentaire du bureau','endfield'=>'commentairebureau'),
						'commentairebureau'=>array('libelle'=>'Votre texte','name'=>'commentairebureau','type'=>'textarea','rows'=>4,'cols'=>38,'value'=>JRequest::getVar('commentairebureau', ''),'obli'=>0,'errmsg'=>NULL),
					);
				}				
		
		// On vérifie ensuite que tout est OK	
		$ok = TRUE;
		foreach ($this->amap->formulaire->fields as $cle => $field) {
			if (isset($field['obli']) && $field['obli'] && (!isset($field['value']) || ($field['value']=='') )) {
				$this->amap->formulaire->fields[$cle]['errmsg'] = 'Vous n\'avez pas indiqué de valeur pour ce champ';
					//echo 'err sur :'.$cle.':'.$formulaire->fields[$cle]['name'].'<br />';
				$ok = FALSE;
			}
		}
		
		// si tout va bien on insert en base et on représente l'état advoir
		if ($ok == TRUE) { // insertion en base 
			// echo 'insertion en base <br />';
			if ($this->amap->formulaire->getval('IDA') == 0) { // pas d'IDA passé il s'agit d'une création
				$query = "INSERT INTO amap_adherent (IDJ,nom,prenom ,email ,fixe ,mobile ,adresse, CP,
						ville, nom2 ,prenom2 ,email2,mobile2 ,CommentaireAdherent,Statut,PublicationAdresse,PrevenirOrphelin ) VALUES (
						".$my->id.",
						'".$this->amap->formulaire->getval('nom')."',
						'".$this->amap->formulaire->getval('prenom')."',
						'".$this->amap->formulaire->getval('email')."',
						'".$this->amap->formulaire->getval('fixe')."',
						'".$this->amap->formulaire->getval('mobile')."',
						'".$this->amap->formulaire->getval('adresse')."',
						'".$this->amap->formulaire->getval('cp')."',
						'".$this->amap->formulaire->getval('ville')."',
						'".$this->amap->formulaire->getval('nom2')."',
						'".$this->amap->formulaire->getval('prenom2')."',
						'".$this->amap->formulaire->getval('email2')."',
						'".$this->amap->formulaire->getval('mobile2')."',
						'".$this->amap->formulaire->getval('commentaireadherent')."',
						'E',
						".$this->amap->formulaire->getval('publiAdr').",
						".$this->amap->formulaire->getval('avertOrph').")";
						$msg = "Votre fiche d'adhérent a bien été créé. Un email de confirmation vient de vous être envoyé.";
						$creation = TRUE;
			} else { // on a un IDA il s'agit d'une modification
				$query = "UPDATE amap_adherent SET 
					nom = '".$this->amap->formulaire->getval('nom')."',
					prenom ='".$this->amap->formulaire->getval('prenom')."',
					email = '".$this->amap->formulaire->getval('email')."',
					fixe = '".$this->amap->formulaire->getval('fixe')."',
					mobile = '".$this->amap->formulaire->getval('mobile')."',
					adresse = '".$this->amap->formulaire->getval('adresse')."',
					CP = '".$this->amap->formulaire->getval('cp')."',
					ville = '".$this->amap->formulaire->getval('ville')."',
					nom2 = '".$this->amap->formulaire->getval('nom2')."',
					prenom2 = '".$this->amap->formulaire->getval('prenom2')."',
					email2 = '".$this->amap->formulaire->getval('email2')."',
					mobile2 = '".$this->amap->formulaire->getval('mobile2')."',
					CommentaireAdherent = '".$this->amap->formulaire->getval('commentaireadherent')."',
					PublicationAdresse = ".$this->amap->formulaire->getval('publiAdr').",
					PrevenirOrphelin = ".$this->amap->formulaire->getval('avertOrph')." ";
					
					if($mainframe->getUserState("amap_idag", 0) > 0){
						$query = $query.", CommentaireBureau = '".$this->amap->formulaire->getval('commentairebureau')."' ";
					}
					$query = $query."WHERE IDA = ".$this->amap->formulaire->getval('IDA');

					$msg = "Votre fiche d'adhérent a bien été modifiée.";
				
					
			}
			$database->setQuery($query);
			$database->query(); if ($database->getErrorNum()){message( 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />');
				} else { // modification en base effectuée avec succès, post traitement 
					if(isset($creation)){
						$email = $this->amap->formulaire->getval('email');
						$sujet = "Confirmation fiche adhérent";
						$corps = 	"Bonjour ".$this->amap->formulaire->getval('nom')." ".$this->amap->formulaire->getval('prenom')."\n
									Vous possédez désormais une fiche d'adhérent sur le site de gestion de l'AMAP.
									Cependant votre demande d'ahdésion est encore soumise à une validation par le bureau qui interviendra suite au paiement de votre part de la cotisation d'adhésion.";
						envoyerCourriel($email, $sujet, $corps);
						// Mettre ici la MAJ du code IDA dans la table JosUSer
						$query = "UPDATE jos_users SET IDA = ( SELECT IDA from amap_adherent Where IDJ = ".$my->id." )	WHERE id = ".$my->id;
						$database->setQuery($query);
						$database->query(); if ($database->getErrorNum()){message( 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />');
						} else { // modification de la table jos_users effectuée avec succès
						}
					}
					// Mise à Jour des longitude et lattitudes 
					if ($this->amap->formulaire->getval('publiAdr') == 1) {
						// Si la publication est demandée alors on recrée avec les données éventuellement modifiée 
						// URL de géocoding : http://maps.google.com/maps/geo?output=xml&key=ABQIAAAAFemHgBtPLZIamK3-868WyhQCC7_X6XFgcwnedMbhUcc53GdDlxSjmMJovGD8GfIRsvy77mfY_1K2iQ&q=malakoff
						// géocoding 
						$url = 'http://maps.google.com/maps/geo?output=csv&key=ABQIAAAAFemHgBtPLZIamK3-868WyhQCC7_X6XFgcwnedMbhUcc53GdDlxSjmMJovGD8GfIRsvy77mfY_1K2iQ&q=';
						$url .= urlencode($this->amap->formulaire->getval('adresse').' '.$this->amap->formulaire->getval('cp').' '.$this->amap->formulaire->getval('ville').' FRANCE');

						$csv = file_get_contents($url) or die("url not loading");

						$csvSplit = split(",", $csv);
						$status = $csvSplit[0];

							//$xml = simplexml_load_file($request_url) or die("url not loading");
							//$status = $xml->Response->Status->code;
							//	$coordinates = $xml->Response->Placemark->Point->coordinates;
							//	$coordinatesSplit = split(",", $coordinates);
								// Format: Longitude, Latitude, Altitude
							//	$lat = $coordinatesSplit[1];
							//	$lon = $coordinatesSplit[0];
							
						if (strcmp($status, "200") == 0) {
							// Successful geocode
							$lat = $csvSplit[2];
							$lon = $csvSplit[3];
							$query = "UPDATE amap_adherent SET 
								lat = ".$lat.",
								lon = ".$lon;
							$query = $query." WHERE IDA = ".$this->amap->formulaire->getval('IDA');
							$database->setQuery($query);
							$database->query(); if ($database->getErrorNum()){message( 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />');
								} else { // modification en base des lat/lon effectuée avec succès
								}
						} elseif (strcmp($status, "620") == 0) {
							$msg .= '<br /> erreur de geocodage pour ajout dans la carte de voisinage  : essayez dans un moment<br />';
		//					$msg .= 'url='.$url.'<br />';
							$msg .= 'csv='.$csv.'<br />';
							$lat = 0;
							$lon = 0;
						}
						else {
							$msg .= '<br />  erreur de geocodage pour ajout dans la carte de voisinage : <br />';
		//					$msg .= 'url='.$url.'<br />';
							$msg .= 'csv='.$csv.'<br />';
							$lat = 0;
							$lon = 0;
						}				
					}
				}
/*
				// Publication des adresses dans la carte de voisinage  SVMAP
				// supression préalable de la carte de voisinage
			$queryMap = "DELETE from jos_svmap_business WHERE user_id = ".$this->amap->formulaire->getval('IDA');
			$database->setQuery($queryMap);
			$database->query(); if ($database->getErrorNum()){message( 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />');}

			
				$queryMap = "INSERT INTO `jos_svmap_business` ( 
								`user_id`, `name`, `address1`, `postcode`, `city`, `country`, `phone`, `email`,marker, `lat`, `lon`) 
								VALUES ("
								.$this->amap->formulaire->getval('IDA').",
								'".$this->amap->formulaire->getval('prenom')." ".$this->amap->formulaire->getval('nom')."',
								'".$this->amap->formulaire->getval('adresse')."',
								'".$this->amap->formulaire->getval('cp')."',
								'".$this->amap->formulaire->getval('ville')."',
								'FRANCE',
								'".$this->amap->formulaire->getval('mobile')."',
								'".$this->amap->formulaire->getval('email')."',
								'http://labs.google.com/ridefinder/images/mm_20_white.png',
								".$lat.",
								".$lon.")";
				$database->setQuery($queryMap);
				$database->query(); if ($database->getErrorNum()){message( 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />');}
*/


			message($msg);
			$this->viewName = 'advoir';
		} else { // sinon on réaffiche le formulaire 
			message("Vous n'avez pas correctement rempli la fiche.", "notice");
			$this->viewName = 'adad';
		}
	}
	
	// effectue une demande d'adhesion pour une période donnée
	function adhesion() {
		global $mainframe;
		$database =& JFactory::getDBO();
		
		// paramètres
		$ida = $mainframe->getUserState("amap_ida", 0);
		$periode = JRequest::getVar('periode', '');
		$date = date("Y-m-d");

		// vérifie si l'ida et la période sont valides
		// echo 'adhésion';
		$msg='';
		if($ida > 0 && $periode != '') {
			// vérifie qu'une demande adhésion n'existe pas déjà pour cette période et que la période existe bien en base
			$query = "SELECT * FROM amap_adhesion WHERE (amap_adhesion.IDA = ".$ida." AND amap_adhesion.Periode = '".$periode."') OR ".$periode." NOT IN (SELECT Periode FROM amap_periodeadhesion)";
			$database->setQuery($query); 
			$database->query(); if ($database->getErrorNum()){$msg .= 'Erreur ' .$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}
			// s'il y a un résultat c'est que l'adhésion est invalide
			if($database->getNumRows() == 0) {
				$query = "INSERT INTO amap_adhesion (IDA, Periode, Statut, Date) 
											 VALUES (".$ida.",'".$periode."', 'A','".$date."')";
				$database->setQuery($query);
				$database->query();
				
				if ($database->getErrorNum()){$msg .=  'Erreur ' .$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';
				} else {
					// la demande d'adhésion s'est déroulé correctement, affiche un message de confirmation
					$msg .=  "Votre demande d'adhésion a bien été pris en compte.".'<Br />';
				}
			} else { $msg .= " une adhésion existe déjà pour cette période".'<Br />'.'période = '.$periode.'<Br />'.'IDA = '.$ida.'<Br />'; }
		} else { $msg .= " données invalides".'<Br />'.'période = '.$periode.'<Br />'.'IDA = '.$ida.'<Br />'; }
		message ($msg);
		//$this->setRedirect('index.php?option=com_amap');
	}

	// ajoute un abonnement pour un adhérent
	function AdAbo() {
		global $mainframe;
		echo 'adabo <br />';
		$database =& JFactory::getDBO();
		$abonnement = $mainframe->getUserState("amap_abonnement");

		// prépare un formulaire pour le renvoyer à la vue si besoin
		$formulaire = $this->amap->formulaireAbo();
		foreach($formulaire->fields as $cle => $field) {
			if(isset($field['name'])){
				$formulaire->fields[$cle]['value'] = JRequest::getVar($field['name'], '');
				$formulaire->fields[$cle]['obli'] = ($field['type'] == 'text');
			}
		}

		// variable qui détermine si le formulaire a été correctement rempli
		$ok = TRUE;
		foreach($formulaire->fields as $cle => $field) {
			if(isset($formulaire->fields[$cle]['obli']) && $formulaire->fields[$cle]['obli'] && ($formulaire->fields[$cle]['value'] == '' || !isset($formulaire->fields[$cle]['value']))) {
				if(substr($cle, 0, 6) == 'option'){
					if(isset($formulaire->fields[$cle.'chk']) && $formulaire->fields[$cle.'chk']['value'] == 1){
						$ok = FALSE;
						$formulaire->fields[$cle]['errmsg'] = 'Vous n\'avez pas indiqué de valeur pour ce champ';
					}
				} else {
					$ok = FALSE;
					$formulaire->fields[$cle]['errmsg'] = 'Vous n\'avez pas indiqué de valeur pour ce champ';
				}

			}
		}
		
		$this->amap->formulaire = $formulaire;

		// variante
		if(!isset($formulaire->fields['variante'])){
			$variante = NULL;
		} else {
			$variante = $formulaire->getVal('variante');
		}

		// quantité
		if(!isset($formulaire->fields['quantite'])){
			$quantite = 1;
		} else {
			if($formulaire->getVal('quantite') > $abonnement['QteMax'] || $formulaire->getVal('quantite') <= 0){
				$formulaire->fields['quantite']['errmsg'] = "Veuillez entrer une quantité valide";
				$ok = FALSE;
			}
			$quantite = $formulaire->getVal('quantite');
		}

		// options
		for($i = 0 ; $i < 10 ; $i++){
			$options[$i] = 0;
			if(isset($formulaire->fields['option'.($i+1)])){
				if($formulaire->getVal('option'.($i+1)) != NULL){ // l'utilisateur 
					$options[$i] = $formulaire->getVal('option'.($i+1));
					if(isset($formulaire->fields['option'.($i+1).'chk']) && $formulaire->fields['option'.($i+1).'chk']['value'] == 1){
						// dépassement de qte max
						if($options[$i] > $abonnement['QteMaxOption'.($i+1)] || $options[$i] <= 0){	
							$formulaire->fields['option'.($i+1)]['errmsg'] = "Veuillez entrer une quantité valide";
							$ok = FALSE;
						}
					}
				}
			}
		}
		
		$query = "	SELECT *
					FROM amap_abonnementadherent
					WHERE IDA = ".$formulaire->getVal('IDA')."
					AND NomAbonnement = '".$abonnement['Nom']."'";
					
		$database->setQuery($query);
		$database->query();  if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}
		
		if($database->getNumRows() > 0){
			$ok = FALSE;
			message("Un abonnement existe déjà pour vous et pour cette production !");
			
		}

		// si tout va bien
		
		if($ok == TRUE && $abonnement['Statut'] != 'Clot' && $abonnement['Statut'] != 'Complet'){
			$date = date("Y-m-d");
			// détermination de la date de dernière distribution 
			$distributionsDispos = $this->amap->distributionsDispos();
			$distributionsDispos = array_reverse($distributionsDispos); // on inverse pour accéder à la dernière
			$derniereDistrib = $distributionsDispos[0];

			$query = "INSERT INTO amap_abonnementadherent (IDA,
															NomAbonnement, 
															PremiereDistribution,
															DerniereDistribution,
															DateAbonnement,
															Variante,
															Quantite, 
															QuantiteOption1, 
															QuantiteOption2, 
															QuantiteOption3, 
															QuantiteOption4, 
															QuantiteOption5, 
															QuantiteOption6, 
															QuantiteOption7, 
															QuantiteOption8, 
															QuantiteOption9, 
															QuantiteOption10)
													VALUES(".$formulaire->getVal('IDA').",'"
															.$abonnement['Nom']."','"
															.$formulaire->getVal('premiereDistrib')."','"
															.$derniereDistrib."','"
															.$date."','"
															.$variante."',"
															.$quantite.","
															.$options[0].","
															.$options[1].","
															.$options[2].","
															.$options[3].","
															.$options[4].","
															.$options[5].","
															.$options[6].","
															.$options[7].","
															.$options[8].","
															.$options[9].")";
															
			$database->setQuery($query);
			$database->query($query);

			if ($database->getErrorNum()){
				message('Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />');
			} else {
				// email
				$destinataire = $formulaire->getVal('email');
				$nom = JRequest::getVar('nom', '');
				$prenom = JRequest::getVar('prenom', '');

				$msg = "Bonjour, <br />";
				$msg .= "Votre demande d'abonnement pour ".$abonnement['Nom']." a bien été pris en compte.<br />";
				$msg .= "Pour suivre l'état de votre demande nous vous invitons à vous rendre sur notre site. <br />";
				$msg .= "Attention votre abonnement ne sera validé et vous ne serez inscrit sur la liste de distribution qu'après la réception de votre dossier complet (chèques de paiement, contrats, cotisation d'adhésion)<br />";
				$msg .= "Les instructions détaillées relatives à votre abonnement (ordre, nombre et montant des chèques, contrat à signer, adresse de dépot du dossier, adhésion) sont données sur le site de notre AMAP <br />";
				$msg .= "Nous vous rappelons ci-dessous vos choix :<br />";
				if($variante != NULL){
					$msg .= "Variante : ".$variante."<br />";
					if($quantite > 1){
						$msg .= "Quantité : ".$quantite."<br />";
					}
				}
				$i = 0;
				foreach($options as $option){
					if($abonnement['Option'.($i+1)] != NULL){
						$msg .= $abonnement['Option'.($i+1)]." : ".$options[$i]."<br />";
					}
					
					$i++;
				}
				
	
				envoyerCourriel($destinataire, 'Confirmation abonnement', $msg);
				// message($msg);
				// message de confirmation
				message("Votre demande d'abonnement a bien été pris en compte. Un email de confirmation vient de vous être envoyé.");
			}
			$this->setRedirect('index.php?option=com_amap&view=advoir');
		} else {
			$this->viewName = 'adabo';
		}
	
	}

	// change le statut d'une adhésion
	function statutAd(){
		global $mainframe;

		if($mainframe->getUserState("amap_droitAbo", FALSE)){

			$IDA = JRequest::getVar('ida', 0);
			$gestAnnee = JRequest::getVar('gestannee', '');
			$statut = JRequest::getVar('statut', 'I');
			$statutsPossibles = array('I', 'V', 'A');

			// le statut est-il valide ?
			if(in_array($statut, $statutsPossibles) && $IDA > 0 && $gestAnnee != ''){
				$database = &JFactory::getDBO();
				$query = "	UPDATE amap_adhesion
							SET Statut = '".$statut."'
							WHERE IDA = ".$IDA."
							AND periode = '".$gestAnnee."'";
				$database->setQuery($query);
				$database->query(); 
				if($database->getErrorNum()){
					echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';	
				} else {
					message("Le changement de statut de l'adhérent a bien été effectué.");
				}
			}
		} else {
			message("Vous ne possédez pas les droits nécéssaires pour cette opération.", "error");
		}
		$this->setRedirect('index.php?option=com_amap&view=gestad&gestannee='.$gestAnnee);
	}
	
	// change le statut d'un abonnement
	function statutAbo(){
		global $mainframe;

		if($mainframe->getUserState("amap_droitAbo", FALSE)){

			$statutsPossibles = array('Encours', 'Abonne', 'Invalide', 'Liste');
			$statut          = JRequest::getVar('statut', 'Invalide');
			$abo             = JRequest::getVar('abo', '');
			$ida             = JRequest::getVar('IDA', 0);
			$com             = JRequest::getVar('commentaire', '');
			$derniereDistrib = JRequest::getVar('derniereDistrib', '');
			$premièreDistrib = JRequest::getVar('premiereDistrib', '');
			$quantite        = JRequest::getVar('quantite', '1');
			$variante        = JRequest::getVar('variante', '');
			$mail            = JRequest::getVar('mail', '');
			for ($i=1; $i<=10;$i++) {
				$option[$i]  = JRequest::getVar('option'.$i, '');
			}

			// on récupère l'abo en base pour voir ce qui a changé
			$database = &JFactory::getDBO();
			$query = "SELECT * FROM amap_abonnementadherent where NomAbonnement = '".$abo."' AND IDA = ".$ida;
			$database->setQuery($query);
			$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg();} 
			if ($database->getNumRows() == 0) { // on n'a pas trouvé d'abonnement 
				message("L'abonnement n'a pas été retrouvé en base !<br/>".$query, "error");
			} else {
				$aboadherent = $database->loadAssoc();
			}
			// On compare les valeurs en base et celle du formulaire pour voir ce qui a changé ..
			if (	$aboadherent['Statut']               != $statut ) { $changeStatut = 1;} else { $changeStatut = 0;}
			if (	$aboadherent['Commentaire']          != $com )    { $changeCom = 1;}else { $changeCom = 0;}
			
			if (	$aboadherent['PremiereDistribution'] != $premièreDistrib ||
					$aboadherent['DerniereDistribution'] != $derniereDistrib ||
					$aboadherent['Quantite']             != $quantite        ||
					$aboadherent['Variante']             != $variante ) { $changeData = 1;}else { $changeData = 0;}
			
			for ($i = 1 ; $i<=10;$i++) {
				if (($option[$i] <> '') && ($aboadherent['QuantiteOption'.$i] != $option[$i])) {$changeData = 1;}
			}
					

			// le statut est-il valide ?
			if( $ida > 0 && $abo != '' ) {
				if (in_array($statut, $statutsPossibles)) {
					if ($changeStatut||$changeCom||$changeData){
						$date = date("Y-m-d");
						$query = "	UPDATE amap_abonnementadherent
									SET Statut = '".$statut."',
										DateAbonnement = '".$date."',
										PremiereDistribution = '".$premièreDistrib."',
										DerniereDistribution = '".$derniereDistrib."',
										Quantite = '".$quantite."',
										Variante = '".$variante."',
										Commentaire = '".$com."'";
						for ($i=1; $i<=10;$i++) {
							if ($option[$i] <> '') {
								$query .= ", QuantiteOption".$i." = '".$option[$i]."' ";
							}
						}
						$query .= " WHERE IDA = ".$ida." AND NomAbonnement = '".$abo."'";

						$database->setQuery($query);
						$database->query();

						if($database->getErrorNum()){
							message ($query.'<br />Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />');
						} else {
							// recupère l'email de l'adhérent
							$query = "SELECT Email FROM amap_adherent WHERE IDA = ".$ida;
							$database->setQuery($query);
							$database->query();
							
							$resultat = $database->loadAssocList();
							$email = $resultat[0]['Email'];
							
							switch($statut){
								case 'Abonne':
									$statut = "valide";
								break;
								case 'Encours':
									$statut = "en cours de traitement";
								break;
								case 'Liste':
									$statut = "sur liste d'attente";
								break;
								case 'Invalide':
									$statut = "invalide";
								break;
							}
							$msg = 'Bonjour,<br /> Nous avons modifié votre abonnement à l\'AMAP : '.$abo.'. <br/>';
							if ($changeStatut) {
								$msg .= 'Le statut a été modifié. Il est désormais <strong>'.$statut.'</strong>.<br />';
							}
							if($changeData){
								$msg .= 'Les caractéristiques ont été changées et sont maintenant : <ul>';
								$msg .= '<li>variante : '.$variante.'</li>';
								$msg .= '<li>La Quantite = '.$quantite.'</li>';
								$msg .= '<li>La date de premiere distribution = '.$premièreDistrib.'</li>';
								$msg .= '<li>La date de derniere Distribution = '.$derniereDistrib.'</li>';
								$optionLabels = listeOptions();$i=1;
								foreach ($optionLabels as $optionLabel) {
									$msg .= '<li>'.$optionLabel.' = '.$option[$i].'</li>';
									$i += 1;
								}
								$msg .= '</ul><br />';
							}
							if ($changeCom){
								$msg .= 'Un nouveau commentaire a été laissé :<br />';
								$msg .= $com;
							}
							if ($mail) { 
								envoyerCourriel($email, 'Votre abonnement à '.$abo, $msg);
								message('le mail suivant a été envoyé à l\'abonné sur son mail ('.$email.') <br />:'.$msg);
							} else {
								message('le mail suivant n\'a pas été envoyé à l\'abonné sur son mail ('.$email.') <br />:'.$msg);
							}
						}
					} else {
						message('pas de modification, on ne fait rien');
					}
				} else { 
					message('le statut "'.$statut.'" n\'est pas correct');
				}
			} else {
				message('identifiant ou abonnement vide');
			}
		} else {
			message("Vous ne possédez pas les droits nécéssaires pour cette opération.", "error");
		}
		$this->setRedirect('index.php?option=com_amap&view=gestabo');
	}
	
	// inscription dans l'équipe de distribution
	function adInscDistr(){
		global $mainframe;

		$date = JRequest::getVar('distrib', '');
		$ida = $mainframe->getUserState("amap_ida", 0);
		$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
		$statut = JRequest::getVar('statut', '');
		$statutsDispo = array('Inscrit', 'Abandonne', 'Chef'); // valeurs possibles pour le statut
		
		if($date != '' && $ida != 0 && $abonnement != NULL && $statut != '' && in_array($statut, $statutsDispo)){
			$database = & JFactory::GetDBO();

			// est-ce l'adhérent est déjà inscrit en équipe de distribution ?
			$query = "	SELECT *
						FROM amap_distribution
						WHERE NomAbonnement = '".$abonnement['Nom']."'
						AND Date = '".$date."'
						AND IDA = ".$ida;
						
			$database->setQuery($query);
			$database->query(); if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}
			
			if($database->getNumRows() == 0 || $statut == "Abandonne"){
				switch($statut)
				{
					case 'Inscrit':
						$subQueryMin = "SELECT IFNULL(MIN(amap_distribution.Role) + 1, 1)
										FROM amap_distribution
										WHERE amap_distribution.NomAbonnement = '".$abonnement['Nom']."'
										AND amap_distribution.Date = '".$date."'
										AND amap_distribution.Role > 0";
										
						$database->setQuery($subQueryMin);
						$database->query();

						$min = $database->loadRow();
					
						$query = "INSERT INTO amap_distribution (IDA, NomAbonnement, Date, Statut, Role)
														VALUES	(".$ida.", '".$abonnement['Nom']."', '".$date."', 'Inscrit', ".$min[0].")";
					break;
					case 'Chef':
						$query = "INSERT INTO amap_distribution (IDA, NomAbonnement, Date, Statut, Role)
														VALUES	(".$ida.", '".$abonnement['Nom']."', '".$date."', 'Inscrit', 0)";
					break;
					case 'Abandonne':
						$query = "	UPDATE amap_distribution
									SET Statut = 'Abandonne'
									WHERE IDA = ".$ida."
									AND NomAbonnement = '".$abonnement['Nom']."'
									AND Date = '".$date."'";
					break;
				}
			} else {
				// cela veut dire que l'adhérent souhaite revenir dans l'équipe de distribution
				$query = "	UPDATE amap_distribution
							SET Statut = 'Inscrit'
							WHERE IDA = ".$ida."
							AND NomAbonnement = '".$abonnement['Nom']."'
							AND Date = '".$date."'";
			}
		
			$database->setQuery($query);
			$database->query();

			if($database->getErrorNum()){
				echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';exit();
			} else {
				message("Votre statut vis à vis de l'équipe de distribution a bien été modifié.");
			}

		}
		$this->setRedirect('index.php?option=com_amap&view=advoirdistrib&abo='.$abonnement['Nom'].'&distrib='.$date);
	}
	
	// déclarer un panier orphelin
	function adOrphDecl(){
		global $mainframe;

		$ida = $mainframe->getUserState("amap_ida", 0);
		$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
		$date = JRequest::getVar('distrib', '');
		$action = JRequest::getVar('action', '');

		if($ida > 0 && $date != '' && $action != '' && $this->amap->aboEstSouscrit() && $abonnement != NULL){
			$ok = TRUE;
		
			$database = & JFactory::getDBO();
			$query = "	SELECT *
						FROM amap_orphelin
						WHERE IDA = ".$ida."	
						AND NomAbonnement = '".$abonnement['Nom']."'
						AND Date = '".$date."'
						AND IDAadoptant = 0";
						
			$database->setQuery($query);
			$database->query(); if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}
			
			if($database->getNumRows() > 0){
				$ok = FALSE;
			}
			
			// vérifie que le panier n'a pas été reporté
			$query = "	SELECT *
						FROM amap_report
						WHERE IDA = ".$ida."
						AND NomAbonnement = '".$abonnement['Nom']."'
						AND DateInitial = '".$date."'";
			
			$database->setQuery($query);
			$database->query(); if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}

			if($database->getNumRows() > 0){
				$ok = FALSE;
			}
			// si le panier n'a pas déjà été déclaré orphelin
			if($action == "declare" && $ok = TRUE){
				$query = "	INSERT INTO amap_orphelin
							(IDA, NomAbonnement, Date)
							VALUES(".$ida.",'".$abonnement['Nom']."','".$date."')";
				$database->setQuery($query);
				$database->query();
				// message de confirmation
				if($database->getErrorNum()){
					echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';
				} else {
					message("Votre panier a été déclaré orphelin.");
				}
				
				if($this->amap->adStatutDistrib($date) != NULL){
					message("Attention vous avez déclaré votre panier orphelin alors que vous êtes inscrit dans l'équipe de distribution !", "notice");
				}
			// sinon cela veut dire qu'on annule la recherche d'adoptant
			} elseif($action == "annule") {
				if(!$this->amap->panierAdAdopte($date)){
					$query = "	DELETE FROM amap_orphelin
								WHERE IDA = ".$ida."
								AND NomAbonnement = '".$abonnement['Nom']."'
								AND Date = '".$date."'";

					$database->setQuery($query);
					$database->query(); if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}
				}
			}
		}
		$this->setRedirect('index.php?option=com_amap&view=advoirdistrib&abo='.$abonnement['Nom'].'&distrib='.$date);
	}
	
	// adopte un panier orphelin
	function adOrphRecup(){
		global $mainframe;
		$ida = JRequest::getVar('ida', 0); // ida du propriétaire du panier
		$date = JRequest::getVar('distrib', '');
		$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
		$IDAadoptant = $mainframe->getUserState("amap_ida", 0); // ida du futur adoptant
		
		if($abonnement != NULL && $ida != 0 && $date != '' && $IDAadoptant != 0){
			$database = &JFactory::getDBO();
			// liste des adoptions d'un panier
			$query = "	SELECT *
						FROM amap_orphelin
						WHERE IDA = ".$ida."
						AND NomAbonnement = '".$abonnement['Nom']."'
						AND Date = '".$date."'
						AND IDAadoptant > 0
						AND Statut = 1";

			$database->setQuery($query);
			$database->query(); if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}
			
			if($database->getNumRows() == 0){
				//... mettre à jour le panier orphelin avec l'ida de l'adoptant et passer le statut à 1 (adoption valide)
				$query = "	UPDATE amap_orphelin
							SET Statut = 0
							WHERE IDA = ".$ida."
							AND IDAadoptant = 0
							AND NomAbonnement = '".$abonnement['Nom']."'
							AND Date = '".$date."'";

				$database->setQuery($query);
				$database->query(); if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}
			
				$dateAdoption = date("Y-m-d");
			
				$query = "	INSERT INTO amap_orphelin (IDA, NomAbonnement, Date, IDAadoptant, DateAdoption, Statut)
							VALUES(".$ida.", '".$abonnement['Nom']."', '".$date."', ".$IDAadoptant.", '".$dateAdoption."', 1)";
							
				$database->setQuery($query);
				$database->query(); if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}
			
			}
		}
		$this->setRedirect('index.php?option=com_amap&view=advoirdistrib&abo='.$abonnement['Nom'].'&distrib='.$date);
	}
	
	// permet à un adhérent de se rétracter après une adoption
	// ne supprime rien, met son propre enregistrement au statut 0 et celui de la déclaration à 1
	function adOrphAnnulRecup(){
		global $mainframe;
		$ida = JRequest::getVar("ida", 0);
		$date = JRequest::getVar('distrib', '');
		$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
		$IDAadoptant = $mainframe->getUserState("amap_ida", 0); // ida de d'adoptant
		
		if($abonnement != NULL && $ida != 0 && $date != '' && $IDAadoptant != 0){
			$database = &JFactory::getDBO();
	
			// invalide son propre enregistrement d'adoption
			$query = "	UPDATE amap_orphelin
						SET Statut = 0
						WHERE IDA = ".$ida."
						AND NomAbonnement = '".$abonnement['Nom']."'
						AND Date = '".$date."'
						AND IDAadoptant = ".$IDAadoptant."
						AND Statut = 1";

			$database->setQuery($query);
			$database->query(); if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}

			// vérifie que la dernière requête a eu un effet
			if($database->getAffectedRows() > 0){
				$query = "	UPDATE amap_orphelin
							SET Statut = 1
							WHERE IDA = ".$ida."
							AND NomAbonnement = '".$abonnement['Nom']."'
							AND Date = '".$date."'
							AND IDAadoptant = 0";
								
					$database->setQuery($query);
					$database->query(); if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}
			}

			if($database->getErrorNum()){
				echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';
			} else {
				message("Vous avez annulé votre réservation. Attention, si le panier ne trouve pas de repreneur avant la distribution vous serez responsable de ce panier.<", "notice");
			}
		}
		$this->setRedirect('index.php?option=com_amap&view=advoirdistrib&abo='.$abonnement['Nom'].'&distrib='.$date);
	}
	
	// report d'un panier d'une distribution par un adhérent
	function adReport(){
		global $mainframe;
		
		$ida = $mainframe->getUserState("amap_ida", 0);
		$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
		$dateReport = JRequest::getVar('dateReport', '');
		$dateInitial = JRequest::getVar('dateInitial', '');
		

		
		if($ida > 0 && $abonnement != NULL && $dateInitial != '' && $this->amap->aboEstSouscrit()){
			$database = &JFactory::getDBO();
			
			$query = "	SELECT *
						FROM amap_report
						WHERE IDA = ".$ida."
						AND NomAbonnement = '".$abonnement['Nom']."'
						AND DateInitial = '".$dateInitial."'";
						
			$database->setQuery($query);
			$database->query(); if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}

			if($database->getNumRows() == 0 && $dateReport != ''){
				$query = "	INSERT INTO amap_report
							(IDA, NomAbonnement, DateInitial, DateReport)
							VALUES(".$ida.", '".$abonnement['Nom']."', '".$dateInitial."', '".$dateReport."')";
				$database->setQuery($query);
				$database->query();
				// message de confirmation
				if($database->getErrorNum()){
					echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';
				} else {
					message("Votre panier a été reporté au ".fdate($dateReport));
				}
				
				if($this->amap->adStatutDistrib($dateInitial) != NULL){
					message("Attention vous avez reporté votre panier alors que vous êtes inscrit dans l'équipe de distribution !", "notice");
				}
				
			} else {
				// sinon cela veut dire que c'est une annulation de report
				$query = "	DELETE FROM amap_report
							WHERE IDA = ".$ida."
							AND NomAbonnement = '".$abonnement['Nom']."'
							AND DateInitial = '".$dateInitial."'";

				$database->setQuery($query);
				$database->query(); if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}
			}

		}	
		$this->setRedirect('index.php?option=com_amap&view=advoirdistrib&abo='.$abonnement['Nom'].'&distrib='.$dateInitial);
	}
	
	// met à jour le commentaire d'un abonnement
	function aboCom(){
		global $mainframe;
		
		if($mainframe->getUserState("amap_droitAbo", FALSE)){
			$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
		
			$com = JRequest::getVar('commentaire', '');
			$ida = JRequest::getVar('ida', 0);
			
			if($abonnement != NULL && $ida > 0){
				$database = &JFactory::getDBO();
				
				$ida = JRequest::getVar('ida', 0);
				
				$query = "	UPDATE amap_abonnementadherent
							SET Commentaire = '".$com."'
							WHERE IDA = ".$ida."
							AND NomAbonnement = '".$abonnement['Nom']."'";
							
				$database->setQuery($query);
				$database->query();
				
				if($database->getErrorNum()){
					echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';
				} elseif($com != '') {
					// recupère l'email de l'adhérent
					$query = "SELECT Email FROM amap_adherent WHERE IDA = ".$ida;
					$database->setQuery($query);
					$database->query();
					
					$resultat = $database->loadAssocList();
					$email = $resultat[0]['Email'];
					
					$msg = 'Bonjour,<br />Le bureau a laissé un commentaire concernant votre abonnement à '.$abonnement['Nom'].' :<br /><br />';
					$msg .= $com;
					
					envoyerCourriel($email, 'Votre abonnement à '.$abonnement['Nom'], $msg);
				}
			}
		} else {
			message("Vous ne possédez pas les droits nécéssaires à cette opération.", "error");
		}
		$this->setRedirect('index.php?option=com_amap&view=gestabo');
	}
	
	// retroceder une identité
	function retroceder(){
		global $mainframe;
		$mainframe->setUserState("amap_idag", 0);
		$mainframe->setUserState("amap_nomg", "");
	}
	
	// exporte au format html ou xls la liste des paniers de la distribution
	function exportListeDistrib(){
		global $mainframe;
	
		$date = JRequest::getVar('distrib', '');
		$type =  JRequest::getVar('type', '');
		$abonnement = $mainframe->getUserState("amap_abonnement", NULL);

		if($date != '' && $type != ''){
			$donnees = $this->amap->rapportListeDistribution($date);
			if($donnees != NULL){
				if($type == 'html'){
					exportHTML($donnees);
				} elseif($type == 'xls') {
					exportExcel($donnees);
				}
			} else {
				message("Impossible d'obtenir un rapport, la liste de distribution est vide.");
				$this->setRedirect('index.php?option=com_amap&view=advoirdistrib&abo='.$abonnement['Nom'].'&distrib='.$date);
			}
		}
	}
	
	// exporte au format html ou xls la composition des équipes de distribution à venir
	function exportListeEquipes(){
		global $mainframe;
		
		$type =  JRequest::getVar('type', '');
		$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
		
		if($abonnement != '' && $type != ''){
			$donnees = $this->amap->listeEquipes();
			if($donnees != NULL){
				if($type == 'html'){
					exportHTML($donnees);
				} elseif($type == 'xls') {
					exportExcel($donnees);
				}
			} else {
				message("Impossible d'obtenir la liste des équipes car elle est vide.");
				$this->setRedirect('index.php?option=com_amap&view=advoirabo&abo='.$abonnement['Nom']);
			}
		}
		
	}
	
	function enregistrerCompteRendu(){
		global $mainframe;
		
		$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
		$date = JRequest::getVar('date', '');
		$texte = JRequest::getVar('texte', '');
		
		if($abonnement != NULL && $date != ''){
			$database = &JFactory::getDBO();
			
			$query = "	UPDATE  amap_jourdistributionabonnement
						SET CompteRendu = '".$texte."'
						WHERE NomAbonnement = '".$abonnement['Nom']."'
						AND Date = '".$date."'";
			
			$database->setQuery($query);
			$database->query(); if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}
		}
		$this->setRedirect('index.php?option=com_amap&view=advoirdistrib&abo='.$abonnement['Nom'].'&distrib='.$date);
	}
}

?>